export { UserAPI, RepoAPI, PullRequestAPI, IssueAPI, OtherAPI }

class UserAPI {
    /****************
     * 用户资料
     ****************/

    /**
     * 获取授权用户资料API
     * 请求类型:    GET
     * 参数说明:    access_token  用户授权码
     */
    static GetAuthorizedProfile() {
        return 'https://gitee.com/api/v5/user'
    }

    /**
     * 获取用户资料API
     * @param username
     * 请求类型:    GET
     * 参数说明:    access_token  用户授权码
     */
    static GetProfile(username: string) {
        return `https://gitee.com/api/v5/users/${username}`
    }

    /****************
     * 用户关注
     ****************/

    /**
     * 获取授权用户正在关注API
     * @param username
     * 请求类型:    GET
     * 参数说明:    access_token  用户授权码
     *             page          当前的页码
     *             pre_page      每页的数量，最大为 100
     */
    static GetAuthorizedFollowing() {
        return `https://gitee.com/api/v5/user/following`
    }

    /**
     * 获取用户的关注者API
     * @param username
     * 请求类型:    GET
     * 参数说明:    access_token  用户授权码
     *             page          当前的页码
     *             pre_page      每页的数量，最大为 100
     */
    static GetAuthorizedFollower() {
        return `https://gitee.com/api/v5/user/followers`
    }

    /**
     * 获取用户正在关注API
     * @param username
     * 请求类型:    GET
     * 参数说明:    access_token  用户授权码
     *             page          当前的页码
     *             pre_page      每页的数量，最大为 100
     */
    static GetFollowing(username: string) {
        return `https://gitee.com/api/v5/users/${username}/following`
    }

    /**
     * 获取用户的关注着API
     * @param username
     * 请求类型:    GET
     * 参数说明:    access_token  用户授权码
     *             page          当前的页码
     *             pre_page      每页的数量，最大为 100
     */
    static GetFollower(username: string) {
        return `https://gitee.com/api/v5/users/${username}/followers`
    }

    /**
     * 检查是否关注该用户
     * @param username
     * @param target_user
     * 请求类型:    GET
     * 参数说明:    access_token  用户授权码
     * 返回类型:    404 未关注
     *             204 已关注
     */
    static CheckFollowing(username: string, target_user: string) {
        return `https://gitee.com/api/v5/users/${username}/following/${target_user}`
    }

    /**
     * 关注用户API
     * @param username
     * 请求类型:    PUT
     * 参数说明:    access_token  用户授权码
     */
    static Follow(username: string) {
        return `https://gitee.com/api/v5/user/following/${username}`
    }

    /**
     * 取消关注用户API
     * @param username
     * 请求类型:    DELETE
     * 参数说明:    access_token  用户授权码
     */
    static CancelFollow(username: string) {
        return `https://gitee.com/api/v5/user/following/${username}`
    }


    /****************
     * 用户仓库
     ****************/

    /**
     * 获取授权用户所有仓库API
     * 请求类型：    GET
     * 参数说明：
     */
    static GetAuthorizedRepo() {
        return 'https://gitee.com/api/v5/user/repos'
    }

    /**
     * 获取用户公开仓库API
     * @param username
     * 请求类型:    GET
     * 参数说明:    access_token  用户授权码
     *             type
     */
    static GetRepo(username: string) {
        return `https://gitee.com/api/v5/users/${username}/repos`
    }


    /****************
     * 用户star
     ****************/

    /**
     * 获取授权用户star仓库API
     * 请求类型：    GET
     * 参数说明：
     */
    static GetAuthorizedStar() {
        return 'https://gitee.com/api/v5/user/starred'
    }

    /**
     * 获取用户star仓库API
     * @param username
     * 请求类型：    GET
     * 参数说明：
     */
    static GetStar(username: string) {
        return `https://gitee.com/api/v5/users/${username}/starred`
    }

    /**
     * 检查是否star仓库
     * @param owner
     * @param repo
     * 请求类型：    GET
     * 参数说明：
     */
    static CheckStar(owner: string, repo: string) {
        return `https://gitee.com/api/v5/user/starred/${owner}/${repo}`
    }

    /**
     * star一个仓库
     * @param owner
     * @param repo
     * 请求类型：    PUT
     * 参数说明：
     */
    static Star(owner: string, repo: string) {
        return `https://gitee.com/api/v5/user/starred/${owner}/${repo}`
    }

    /**
     * 取消star一个仓库
     * @param owner
     * @param repo
     * 请求类型：    DELETE
     * 参数说明：
     */
    static CancelStar(owner: string, repo: string) {
        return `https://gitee.com/api/v5/user/starred/${owner}/${repo}`
    }


    /****************
     * 用户watch
     ****************/

    /**
     * 获取授权用户watch仓库API
     * 请求类型：    GET
     * 参数说明：
     */
    static GetAuthorizedWatch() {
        return 'https://gitee.com/api/v5/user/subscriptions'
    }

    /**
     * 获取用户watch仓库API
     * @param username
     * 请求类型：    GET
     * 参数说明：
     */
    static GetWatch(username: string) {
        return `https://gitee.com/api/v5/users/${username}/subscriptions`
    }

    /**
     * 检查是否watch仓库
     * @param owner
     * @param repo
     * 请求类型：    GET
     * 参数说明：
     */
    static CheckWatch(owner: string, repo: string) {
        return `https://gitee.com/api/v5/user/subscriptions/${owner}/${repo}`
    }

    /**
     * watch一个仓库
     * @param owner
     * @param repo
     * 请求类型：    PUT
     * 参数说明：
     */
    static Watch(owner: string, repo: string) {
        return `https://gitee.com/api/v5/user/subscriptions/${owner}/${repo}`
    }

    /**
     * 取消watch一个仓库
     * @param owner
     * @param repo
     * 请求类型：    DELETE
     * 参数说明：
     */
    static CancelWatch(owner: string, repo: string) {
        return `https://gitee.com/api/v5/user/subscriptions/${owner}/${repo}`
    }
}

class RepoAPI {
    /**
     * 获取仓库API
     * @param owner
     * @param repo
     * 请求类型:    GET
     * 参数说明:    access_token  用户授权码
     */
    static GetRepo(owner: string, repo: string) {
        return `https://gitee.com/api/v5/repos/${owner}/${repo}`
    }

    /**
     * 获取仓库目录
     * @param owner
     * @param repo
     * @param sha
     * 请求类型:    GET
     * 参数说明:    access_token  用户授权码
     */
    static GetTree(owner: string, repo: string, sha: string) {
        return `https://gitee.com/api/v5/repos/${owner}/${repo}/git/trees/${sha}`
    }

    /**
     * 获取具体路径的内容
     * @param owner
     * @param repo
     * @param sha
     * 请求类型:    GET
     * 参数说明:    access_token  用户授权码
     */
    static GetContent(owner: string, repo: string, sha: string) {
        return `https://gitee.com/api/v5/repos/${owner}/${repo}/git/blobs/${sha}`
    }

    /**
     * 获取许可证
     * @param owner
     * @param repo
     * 请求类型:    GET
     * 参数说明:    access_token  用户授权码
     */
    static GetLICENSE(owner: string, repo: string) {
        return `https://gitee.com/api/v5/repos/${owner}/${repo}/license`
    }

    /**
     * 获取README
     * @param owner
     * @param repo
     * 请求类型:    GET
     * 参数说明:    access_token  用户授权码
     */
    static GetREADME(owner: string, repo: string) {
        return `https://gitee.com/api/v5/repos/${owner}/${repo}/readme`
    }

    /**
     * 搜索仓库
     * 请求类型:    GET
     * 参数说明:    access_token  用户授权码
     */
    static Search() {
        return 'https://gitee.com/api/v5/search/repositories'
    }
}

class PullRequestAPI {
    /**
     * 获取仓库pr
     * 请求类型:    GET
     * 参数说明:    access_token  用户授权码
     *             state         Pull Request 状态
     *             page          当前页码
     *             per_page      每页的数量
     */
    static GetPullRequests(owner: string, repo: string) {
        return `https://gitee.com/api/v5/repos/${owner}/${repo}/pulls`
    }
}

class IssueAPI {
    /**
     * 获取仓库issue
     * 请求类型:    GET
     * 参数说明:    access_token  用户授权码
     *             state         Pull Request 状态
     *             page          当前页码
     *             per_page      每页的数量
     */
    static GetRepoIssues(owner: string, repo: string) {
        return `https://gitee.com/api/v5/repos/${owner}/${repo}/issues`
    }
}

class OtherAPI {
    /**
     * 渲染Markdown
     * 请求类型:    POST
     * 参数类型:    Body->form-data
     * 参数说明:    access_token  用户授权码
     *             text          Markdown 文本
     */
    static RenderMarkdown() {
        return 'https://gitee.com/api/v5/markdown'
    }
}